﻿using UnityEngine;
using System.Collections;
using RootMotion.FinalIK;

namespace RootMotion.Demos
{

    public class VRIKPlatformController : MonoBehaviour
    {

        public VRIK ik;
        public Transform trackingSpace;
        public Transform platform;
        public bool moveToPlatform = true;

        private Transform lastPlatform;
        private Vector3 lastPosition;
        private Quaternion lastRotation = Quaternion.identity;

        void LateUpdate()
        {
            if (platform != lastPlatform)
            {
                if (platform != null)
                {
                    // Moves the character to the position/rotation of the new platform
                    if (moveToPlatform)
                    {
                        lastPosition = ik.transform.position;
                        lastRotation = ik.transform.rotation;
                        ik.transform.position = platform.position;
                        ik.transform.rotation = platform.rotation;
                        trackingSpace.position = platform.position;
                        trackingSpace.rotation = platform.rotation;
                        ik.solver.AddPlatformMotion(platform.position - lastPosition, platform.rotation * Quaternion.Inverse(lastRotation), platform.position);
                    }

                    lastPosition = platform.position;
                    lastRotation = platform.rotation;
                }

                ik.transform.parent = platform;
                trackingSpace.parent = platform;

                lastPlatform = platform;
            }

            if (platform != null)
            {
                // Adding the motion of this Transform to VRIK
                ik.solver.AddPlatformMotion(platform.position - lastPosition, platform.rotation * Quaternion.Inverse(lastRotation), platform.position);

                lastRotation = platform.rotation;
                lastPosition = platform.position;
            }
        }
    }
}
